import axios from 'axios'
import { useUserStore } from '@/stores/user'
import router from '@/router'

const request = axios.create({
  // baseURL: import.meta.env.VITE_API_URL  // vite.config.ts 使用代理服务器配置
  //  http://syt.atguigu.cn/api
  // baseURL: '/api',
  timeout: 5000
})

// 请求拦截器
request.interceptors.request.use((config) => {
  // 请求头增加token认证
  const userStore = useUserStore()
  if (userStore.token.access_token) {
    config.headers.Authorization = userStore.token?.access_token
  }
  return config
})

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // 请求成功的回调
    return response
  },
  async (error) => {
    const userStore = useUserStore()
    // 请求失败的回调
    const status = error.response.status
    switch (status) {
      case 401:
        // 认证过期
        await userStore
          .refreshToken()
          .then(() => {
            // 用新的token重新请求
            return request(error.config)
          })
          .catch(() => {
            ElMessage.error('刷新token失败, 需重新登录')
            window.localStorage.removeItem('tokenInfo')
            router.push({ name: 'login', query: { redirect: router.currentRoute.value.fullPath } })
            return
          })
        break
      case 403:
        ElMessage({
          type: 'error',
          message: '当前用户操作权限不足！'
        })
        return { data: { code: '000403' } }
      case 404:
        ElMessage({
          type: 'error',
          message: '请求失败，输入的路径或参数有误！'
        })
        break
      case 500 | 501 | 502 | 503 | 504 | 505:
        ElMessage({
          type: 'error',
          message: '服务器繁忙，请联系系统管理员或稍后再试！'
        })
        break
    }
    return Promise.reject(error)
  }
)
export default request
